<script type="text/javascript">
	//每个函数都有prototype属性，称之为原型；因为这个属性的值是个对象，也称之为原型对象
	//作用：1.存放一些属性和方法，共享给实例对象使用 2.在javascript中实现继承

	//每个对象都有__proto__属性，这个属性指向它的原型对象，原型对象也是对象，也有__proto__属性，指向原型对象的原型对象，这样一层一层形成链式结构称为原型链，最顶层找不到，则返回Null

	//1.原型是function对象的一个属性，它定义了构造函数制造出对象的公共祖先。通过该构造函数产生的对象，可以继承该原型的属性和方法。原型也是对象。
	//Person.prototype  //prototype是系统里函数自带的属性，函数出生的时候就被定义好了
	//Person.prototype = {}	空对象，是祖先,原型是该构造函数构造出对象的公有祖先
	Person.prototype.name = 'qwe';
	Person.prototype.lastname = 'lastname'
	Person.prototype.say = function(){
		console.log('hehe');//say方法打印'hehe'
	}
	function Person(){

	}
	person = new Person();
	person1 = new Person();//对象上没有属性方法，用的是原型上的，不是自身的，借用继承关系

	function Person(){
		this.name = 'asd';
	}
	person2 = new Person();//直接用this.name ，不用原型的name

	function Person(name,age,sex){
		this.name = name;
		this.age = age;
		this.sex = sex
	}
	var person3 = new Person('xuming',35,'male')


	function Car(color,owner){//正常的构造函数，有固定有选配
		this.owner = owner;
		this.carName = 'BMW';
		this.height = 1400;
		this.lang = 4000;
		this.color = color;
	}
	var car1 = new Car('red','rt');
	var car2 = new Car();
	//代码耦合，有重复执行的地方，carName,height,lang是固定的属性，不像color和owner每次不一样，每次重复执行，可以放到原型里

	//给原型赋值，只执行一遍，原型只有一个
	Car.prototype.carName ='BMW';
	Car.prototype.height = 1400;
	//构造函数构造的对象，所有的都继承原型
	function Car(color,owner){
		this.owner = owner;
		this.color = color;
	}
	car3 = new Car('green','asd');
	//2.公有的东西，提取出来放到原型里。利用原型的特点和概念，可以提取公有属性

</script>

原型的增删改查
<script type="text/javascript">
	Person.prototype.lastname = 'xiao';
	function Person(name){
		this.name = name;
	}
	var person = new Person();
	person.lastname //自己没有lastname属性，访问原型的属性,如果自己有lastname属性，访问自己的
	person.lastname = 'sd';//给自己增加属性，改不了原型的的属性,通过对象改原型的东西基本不可能。通过构造函数构造的对象给原型增加属性，不可能
	Person.prototype.lastname = 'sdf';//修改原型的lastname属性

	delete person.lastname;

	Car.prototype ={
		height : 1200,
		lang : 100,
		carName : 'BMW'
	}
	function Car(){}
	var car = new Car();

	car.constructor //找到它的构造器，指向Car本身

	function Abc(){}
	Bcd.prototype = {//能够改变它的constructor
		constructor : Abc
	}
	function Bcd(){}
	var bcd = new Bcd();
	console.log(bcd.constructor)//bcd的构造器指向函数Abc
</script>